package cn.demoncat.util.pay.ceb.entity;

import cn.demoncat.util.lang.LocalDateUtil;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
import lombok.Data;
import org.apache.commons.lang3.StringUtils;

import java.math.BigDecimal;
import java.time.format.DateTimeFormatter;
import java.util.List;

/**
 * 光大银行-响应参数-查询会员资金明细
 *
 * @author 延晓磊
 * @since 2022年02月18日
 */
@Data
public class QueryMemberAccountLogResponseParam extends ResponseParam{

    /**
     * 响应体
     */
    private ResponseBody body;

    /**
     * 响应体
     */
    @Data
    public static class ResponseBody extends ResponseParam.ResponseBody{
        // 总条数
        private Long totalNum;
        // 列表
        @XStreamImplicit
        private List<Data> frame;

        /**
         * 数据
         */
        @lombok.Data
        public static class Data{

            // 资金监管系统流水号
            private String fcsSerialNum;
            // 会员编号
            private String memNum;
            // 0-借（支出）  1-贷（收入）
            private String addReduce;
            // 发生金额
            private BigDecimal tradeAmount;
            // 账务处理时间：yyyyMMddHH:mm:ss
            private String procTime;
            // 资金余额
            private BigDecimal balance;
            // 可用余额
            private BigDecimal useableBalance;
            // 对方名称
            private String otherName;
            // 对方虚拟账户
            private String otherNum;
            // 对方实体账户（业务类型是0-入金、1-出金时有值）
            private String otherAccNum;
            // 对方实体账户名称（业务类型是0-入金、1-出金时有值）
            private String otherAccName;
            // 对方银行名称
            private String otherAccBankName;
            // 核心流水号（业务类型是0-入金、1-出金时有值）
            private String coreTelSerialNum;
            // 是否跨行：01-行内、02-跨行
            private String isCrossLine;
            // 业务类型：0-入金、1-出金、2-交易、8-作废
            private String busType;
            // 摘要
            private String brief;

            /**
             * 账务处理时间
             *
             * @return yyyy-MM-dd HH:mm:ss
             */
            public String getProcTime(){
                if (StringUtils.isNotBlank(this.procTime)) {
                    return LocalDateUtil.toStr(LocalDateUtil.toLocalDateTime(this.procTime, DateTimeFormatter.ofPattern("yyyyMMddHH:mm:ss")));
                }
                return this.procTime;
            }

            /**
             * 业务类型
             */
            public interface BizType{

                // 入金 - 充值
                String INCOME = "0";
                // 出金 - 提现
                String EXPEND = "1";
                // 交易 - 冻结、解冻、退款、收取
                String TRADE = "2";
                // 作废 - 交易有问题
                String INVALID = "8";
            }
        }
    }


}
